package com.ourygo.fileselect.util;


import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.widget.Toast;

import java.util.ArrayList;

public class FileSelectUtil {
    //OURYGO File Select下载地址
    public static final String DOWNLOAD_URL_OURYGO_FILE_SELECT = "http://fs.ourygo.top";

    //路径
    public static final int FILE_TYPE_PATH = 0;
    //文件
    public static final int FILE_TYPE_FILE = 1;
    //.cdb文件
    public static final int FILE_TYPE_CDB = 2;
    //.conf文件(卡表)
    public static final int FILE_TYPE_CONF = 3;
    //.zip文件(卡图压缩包)
    public static final int FILE_TYPE_CARD_PIC = 4;
    //.lua文件
    public static final int FILE_TYPE_LUA = 5;
    //.cjcd文件
    public static final int FILE_TYPE_ENDING = 6;
    //.zip文件
    public static final int FILE_TYPE_ZIP = 7;
    //.jpg  .png  .bpm  .jpeg文件
    public static final int FILE_TYPE_PIC = 8;
    //.txt文件
    public static final int FILE_TYPE_TXT = 9;
    //.ydk文件
    public static final int FILE_TYPE_YDK = 10;
    //.yse-set文件
    public static final int FILE_TYPE_YSE_SET = 11;
    //自定义后缀文件
    public static final int FILE_TYPE_CUSTOM = 100;

    //需要选择的文件类型
    public static final String ARG_TYPE_ARRAY = "TYPE_ARRAY";
    //选择的图片数量
    public static final String ARG_PICS_NUM = "PICS_NUM";
    //裁剪图片的比例宽，选择图片数量为1时生效
    public static final String ARG_PICS_RATIO_WIDTH = "PICS_RATIO_WIDTH";
    //裁剪图片的比例高，选择图片数量为1时生效
    public static final String ARG_PICS_RATIO_HEIGHT = "PICS_RATIO_HEIGHT";
    //裁剪图片的分辨率宽度，选择图片数量为1时生效
    public static final String ARG_PICS_SIZE_WIDTH = "PICS_SIZE_WIDTH";
    //裁剪图片的分辨率高度，选择图片数量为1时生效
    public static final String ARG_PICS_SIZE_HEIGHT = "PICS_SIZE_HEIGHT";
    //自定义文件后缀名(.xxx)(可选)
    public static final String ARG_FILE_SUFFIX = "FILE_SUFFIX";
    //当选择文件为类型多选/其他文件/自定义后缀的文件时的标题栏提示文字(可选,不写默认为文件选择)
    public static final String ARG_SELECT_NAME = "SELECT_NAME";
    //打开文件选择的默认路径(可选,不写默认为根目录)
    public static final String ARG_CURRENT_PATH = "CURRENT_PATH";
    //选择的最大文件个数(可选,不写默认单选)
    public static final String ARG_FILE_NUM = "FILE_NUM";
    //是否横屏进入选择文件（可选，默认竖屏）
    public static final String ARG_IS_HORIZONTAL = "IS_HORIZONTAL";


    //返回的文件路径列表参数名  ArrayList<String>
    public static final String ARG_PATH_LIST = "PATH_LIST";
    //返回的文件路径参数名   String
    public static final String ARG_PATH = "PATH";
    //返回的图片路径列表参数名  ArrayList<String>
    public static final String ARG_PICS = "PICS";
    //返回的文件类型参数名(返回多个文件时此参数为空)
    public static final String ARG_FILE_TYPE = "FILE_TYPE";

    //获取文件选择Intent
    public static Intent getFileSelectIntent() {
        Intent intent = new Intent();
        intent.setComponent(new ComponentName("com.ourygo.fileselect", "com.ourygo.fileselect.activity.SplashActivity"));
        intent.setAction("ourygo.intent.action.OURYGO_FILE_SELECT");
        return intent;
    }


    /*
     *activity:activity对象
     *requestCode:请求值
     *FileTypeList:要选择的类型的文件列表,如new int[]{FILE_TYPE_CDB,FILE_TYPE_LUA};
     */
    public static void startFileSelect(Activity context, int requestCode, int[] fileTypeList) {
        startFileSelect(context, requestCode, fileTypeList, 1);
    }

    /*
     *activity:activity对象
     *requestCode:请求值
     *FileTypeList:要选择的类型的文件列表,如new int[]{FILE_TYPE_CDB,FILE_TYPE_LUA};
     *fileNum:选择的最大文件数量
     */
    public static void startFileSelect(Activity context, int requestCode, int[] fileTypeList, int fileNum) {
        Intent intent = getFileSelectIntent();
        intent.putExtra(FileSelectUtil.ARG_TYPE_ARRAY, fileTypeList);
        intent.putExtra(FileSelectUtil.ARG_FILE_NUM, fileNum);
        if (isStart(context, intent)) {
            context.startActivityForResult(intent, requestCode);
        }
    }

    /*
     *图片选择
     *context:Activity对象
     *requestCode:请求值
     *picNum:选择的图片数量
     */
    public static void startPicSelect(Activity context, int requestCode, int picNum) {
        Intent intent = getFileSelectIntent();
        intent.putExtra(FileSelectUtil.ARG_PICS_NUM, picNum);
        if (isStart(context, intent)) {
            context.startActivityForResult(intent, requestCode);
        }
    }

    /**
     * 图片选择并裁剪
     *
     * @param context     Activity对象
     * @param requestCode 请求码
     * @param ratioWidth  裁剪比例宽度
     * @param ratioHeight 裁剪比例高度
     * @param sizeWidth   裁剪分辨率宽度
     * @param sizeHeight  裁剪分辨率高度
     */
    public static void startPicSelect(Activity context, int requestCode, int ratioWidth, int ratioHeight, int sizeWidth, int sizeHeight) {
        Intent intent = getFileSelectIntent();
        intent.putExtra(FileSelectUtil.ARG_PICS_NUM, 1);
        intent.putExtra(FileSelectUtil.ARG_PICS_RATIO_WIDTH, ratioWidth);
        intent.putExtra(FileSelectUtil.ARG_PICS_RATIO_HEIGHT, ratioHeight);
        intent.putExtra(FileSelectUtil.ARG_PICS_SIZE_WIDTH, sizeWidth);
        intent.putExtra(FileSelectUtil.ARG_PICS_SIZE_HEIGHT, sizeHeight);
        if (isStart(context, intent)) {
            context.startActivityForResult(intent, requestCode);
        }
    }

    /**
     * 获取选择的文件路径
     *
     * @param data
     * @return
     */
    public static String getFileSelectPath(Intent data) {
        return data.getStringExtra(FileSelectUtil.ARG_PATH);
    }

    /**
     * 获取选择的文件类型
     *
     * @param data
     * @return
     */
    public static int getFileType(Intent data) {
        return data.getIntExtra(FileSelectUtil.ARG_FILE_TYPE, FileSelectUtil.FILE_TYPE_FILE);
    }

    public static ArrayList<String> getFileSelectPathList(Intent data) {
        return data.getStringArrayListExtra(FileSelectUtil.ARG_PATH_LIST);
    }

    /**
     * 获取选择的图片合集
     *
     * @param data
     * @return
     */
    public static ArrayList<String> getPicsSelectPath(Intent data) {
        return data.getStringArrayListExtra(FileSelectUtil.ARG_PICS);
    }

    //是否能选择图片
    public static boolean isStart(Context context, Intent intent) {
        if (context.getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) != null) {
            try {
                PackageInfo info = context.getPackageManager().getPackageInfo("com.ourygo.fileselect", 0);
                if (info.versionCode >= 13) {
                    return true;
                } else {
                    Toast.makeText(context, "OURYGO File Select版本过老,请下载最新版本", Toast.LENGTH_SHORT).show();
                    context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(DOWNLOAD_URL_OURYGO_FILE_SELECT)));
                }
            } catch (PackageManager.NameNotFoundException e) {
                Toast.makeText(context, "获取OURYGO File Select信息失败,原因为" + e, Toast.LENGTH_SHORT).show();
            }
        } else {
            Toast.makeText(context, "下载安装OURYGO File Select后进行文件选择", Toast.LENGTH_SHORT).show();
            //未安装OURYGO File Select,跳转网址下载
            context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(DOWNLOAD_URL_OURYGO_FILE_SELECT)));
        }
        return false;
    }

}

